const WXAPI = require('apifm-wxapi') //人家的API
const UserApi = require('../libs/user')
const CONFIG = require('../libs/config')

async function checkSession() {
  return new Promise((resolve, reject) => {
    wx.checkSession({
      success() {
        return resolve(true)
      },
      fail() {
        return resolve(false)
      }
    })
  })
}

/**
 *  检测登录状态，返回 true / false
 */
async function checkHasLogined() {
  const token = wx.getStorageSync('token')
  if (!token) {
    // console.log("token为空")
    return false
  }
  const loggined = await checkSession()
  if (!loggined) {
    // console.log("session为空")
    wx.removeStorageSync('token')
    return false
  }
  // then函数里面的返回值在外面被接收，然后返回
  // 检查用户token是否有效
  const isLogined = UserApi.checkToken().then(res => {
    if (res.code != 200) {
      wx.removeStorageSync('token')
      return false
    }
    return true
  })
  return isLogined
}

/**
 * 获取微信的code，用于登录
 */
async function wxaCode() {
  return new Promise((resolve, reject) => {
    wx.login({
      success(res) {
        return resolve(res.code)
      },
      fail() {
        wx.showToast({
          title: '获取code失败',
          icon: 'none'
        })
        return resolve('获取code失败')
      }
    })
  })
}

/*
* 传进来一个页面进行登录好像
*/
async function login(page) {
  const _this = this
  wx.login({
    success: function (res) {
      const componentAppid = wx.getStorageSync('componentAppid')
      if (componentAppid) {
        WXAPI.wxappServiceLogin({
          componentAppid,
          appid: wx.getStorageSync('appid'),
          code: res.code
        }).then(function (res) {
          if (res.code == 10000) {
            // 去注册
            return;
          }
          if (res.code != 0) {
            // 登录错误
            wx.showModal({
              title: '无法登录',
              content: res.msg,
              showCancel: false
            })
            return;
          }
          // wx.setStorageSync('token', res.data.token)
          wx.setStorageSync('uid', res.data.uid)
          _this.bindSeller()
          if (page) {
            page.onShow()
          }
        })
      } else {
        WXAPI.login_wx(res.code).then(function (res) {
          if (res.code == 10000) {
            // 去注册
            return;
          }
          if (res.code != 0) {
            // 登录错误
            wx.showModal({
              title: '无法登录',
              content: res.msg,
              showCancel: false
            })
            return;
          }
          // wx.setStorageSync('token', res.data.token)
          wx.setStorageSync('uid', res.data.uid)
          _this.bindSeller()
          if (page) {
            page.onShow()
          }
        })
      }
    }
  })
}

// 授权登录，获取用户token
 function authorize() {
  return new Promise((resolve, reject) => {
    // 调用登录接口
    wx.login({
      success: res => {
        // 发送 res.code 到后台换取 openId, sessionKey
        // console.log("测试登录" + res.code)
        if (res.code) {
          // console.log(res.code)
          wx.request({
            url: CONFIG.Config.url + '/user/onLogin', //微信服务器获取appid的网址 不用变
            method: 'post', //必须是post方法
            data: {
              code: res.code,
              // appid: 'wx0b406c15a434439d',//仅为实例appid
              // secret: '56a965efea86d31fd01a95598cd1bf20',//仅为实例secret
              // grant_type: 'authorization_code'
            },
            header: {
              // 'content-type': 'application/x-www-form-urlencoded',
              'content-type': 'application/json',
            },
            success: function (res) {
              // console.log(res.data.data.token)
              console.log("Token进行刷新")
              wx.setStorageSync('token', res.data.data.token); //将openid存入本地缓存
            }
          })
          resolve(res)
        } else {
          console.log("登陆失败");
          reject(res.code)
        }
      }
    });
  })
}

/**
 * 登出
 */
function loginOut() {
  wx.removeStorageSync('token')
  wx.removeStorageSync('uid')
}

/**
 * 检查用户是否已经授权了小程序需要的权限，
 * @param  scope 
 */
async function checkAndAuthorize(scope) {
  return new Promise((resolve, reject) => {
    wx.getSetting({
      success(res) {
        if (!res.authSetting[scope]) {
          wx.authorize({
            scope: scope,
            success() {
              resolve() // 无返回参数
            },
            fail(e) {
              console.error(e)
              // if (e.errMsg.indexof('auth deny') != -1) {
              //   wx.showToast({
              //     title: e.errMsg,
              //     icon: 'none'
              //   })
              // }
              wx.showModal({
                title: '无权操作',
                content: '需要获得您的授权',
                showCancel: false,
                confirmText: '立即授权',
                confirmColor: '#e64340',
                success(res) {
                  wx.openSetting();
                },
                fail(e) {
                  console.error(e)
                  reject(e)
                },
              })
            }
          })
        } else {
          resolve() // 无返回参数
        }
      },
      fail(e) {
        console.error(e)
        reject(e)
      }
    })
  })
}

/**
 * 改的不太对，authorize可能不是用户登录，和login方法重了
 */
module.exports = {
  checkHasLogined: checkHasLogined,
  login: login,
  loginOut: loginOut,
  checkAndAuthorize: checkAndAuthorize,
  authorize: authorize,
}